const os = require('os')
const path = require('path')
function resolve(dir) {
  return path.join(__dirname, dir)
}

const getLocalIP = () => {
  const osType = os.type() //系统类型
  const netInfo = os.networkInterfaces() //网络信息
  let ip = ''
  if (osType === 'Windows_NT') {
    for (let dev in netInfo) {
      if (dev === '本地连接' || dev === '以太网') {
        for (let j = 0; j < netInfo[dev].length; j++) {
          if (netInfo[dev][j].family === 'IPv4') {
            ip = netInfo[dev][j].address
            break
          }
        }
      }
    }
  } else if (osType === 'Linux') {
    ip = netInfo.eth0[0].address
  }

  return ip
}

module.exports = {
  lintOnSave: true,
  publicPath: './',
  outputDir: 'dist',
  filenameHashing: true,
  // 将js、css、img打包到一个目录
  assetsDir: 'resource',
  productionSourceMap: true,
  configureWebpack: {
    devtool: 'source-map'
  },
  chainWebpack: config => {
    config.resolve.alias
      .set('@', resolve('src'))
      .set('assets', resolve('src/assets'))
      .set('components', resolve('src/components'))
  },
  devServer: {
    open: true,
    // development server port 8000
    port: 8000,
    // 是否使用https
    https: false,
    // 模块热替换
    hot: true,
    // 一切服务都启用gzip 压缩
    compress: true,
    // 代理
    proxy: {
      '/': {
        target: 'http://121.43.139.7:80/',
        changeOrigin: true,
        secure: false,
        cookieDomainRewrite: getLocalIP(),
        ws: true
      }
    }
  },
  css: {
    requireModuleExtension: true,
    loaderOptions: {
      // 这里的选项会传递给 css-loader
      css: {
        // 配置 CSS Modules 的class命名规则
        modules: {
          localIdentName: '[local]_[hash:base64:8]'
        }
      },
      // 给 sass-loader 传递选项
      // sass: {
      // @/ 是 src/ 的别名
      // 所以这里假设你有 `src/variables.sass` 这个文件
      // 注意：在 sass-loader v7 中，这个选项名是 "data"
      //   prependData: '@import "~@/variables.scss"'
      // },
      // 默认情况下 `sass` 选项会同时对 `sass` 和 `scss` 语法同时生效
      // 因为 `scss` 语法在内部也是由 sass-loader 处理的
      // 但是在配置 `data` 选项的时候
      // `scss` 语法会要求语句结尾必须有分号，`sass` 则要求必须没有分号
      // 在这种情况下，我们可以使用 `scss` 选项，对 `scss` 语法进行单独配置
      scss: {
        prependData: '@import "~@/assets/variables.scss";'
      },
      // 给 less-loader 传递 Less.js 相关选项
      less: {
        // http://lesscss.org/usage/#less-options-strict-units `Global Variables`
        // `primary` is global variables fields name
        globalVars: {
          primary: '#fff'
        }
      }
    }
  }
}
